#ifndef __SKY_QQ_OPEN_H__
#define __SKY_QQ_OPEN_H__
#if defined(__MMI_DSM_NEW__)&&defined(__MMI_SKYQQ__) && !defined(WIN32)

#include "MMIDataType.h"
//#include "QQ2008_platform.h"

//#define SPREADTRUM_MOD

typedef  unsigned short     QQU16;      /* Unsigned 16 bit value */
typedef  unsigned long int  QQU32;      /* Unsigned 32 bit value */
typedef  long int  QQS32;      /* signed 32 bit value */
typedef  unsigned char        QQU8;        /* Signed 8  bit value */
typedef  signed char        QQS8;        /* Signed 8  bit value */
typedef  signed short       QQS16;       /* Signed 16 bit value */

 
enum 
{
	QQ2008_STOP,
	QQ2008_RUN,
	QQ2008_PAUSE,
	QQ2008_BACK_RUN  /*后台运行*/
};

enum 
{
	QQ2008_HIDE_ICON,
	QQ2008_SHOW_ICON,
	QQ2008_BLINK_ICON
};


enum SKY_QQ_TOUCH_STATE{
	SKY_QQ_P_TOUCH_STATE_NONE,
	SKY_QQ_P_TOUCH_STATE_DOWN,
	SKY_QQ_P_TOUCH_STATE_MOVE,
	SKY_QQ_P_TOUCH_STATE_UP,
	SKY_QQ_P_TOUCH_STATE_LONGTAP,
	SKY_QQ_P_TOUCH_STATE_REPEAT,
	SKY_QQ_P_TOUCH_STATE_ABORT,
	SKY_QQ_P_TOUCH_STATE_MAX
};

//huangsunbo 6236 默认打开独占RAM
#ifdef MT6236
#define MEM_STATIC_MALLOC_DATA
#endif

#ifdef MEM_STATIC_MALLOC_DATA
#ifdef __MR_CFG_ENTRY_QQ_BEIZHU__
#define QQ2008_MEM_LEN 170*1024
#else
#ifdef __MMI_NGUAQ__
#define QQ2008_MEM_LEN 150*1024
#else
#define QQ2008_MEM_LEN 130*1024
#endif
#endif
#endif

//后台重连的次数
//#define QQ2008_AUTOLOGIN_TIMERS 10

/********************************************
函数名:QQS32 GetMallocMemSize(void)
描  述:返回需要申请内粗的大小
              如果使用静态内存模式那么返回值的大小必须和之前静态内存申请大小相同
参  数:无
返  回:返回需要申请内粗的大小
函数实现:huge2010-03-20
********************************************/
QQS32 GetMallocMemSize(void);
 
/********************************************
函数名:QQS32 GetAutoConnectTimers(void)
描  述:返回重连次数的设置
参  数:无
返  回:返回重连次数的设置
函数实现:huge2010-03-20
********************************************/
QQS32 GetAutoConnectTimers(void);

#define PURE_MEMORY

extern QQU8 QQmin;

//extern QQS32 QQ2008KeyEventInto(QQS16 ktype ,QQS32 param1,QQS32 param2);
//数字键定义开关，如果有数字键就返回1，否则返回0。
QQS32 IsHaveNumKey(void);
//是否有中间键，五方向键的定义开关，如果是五方向键就返回1，否则返回0；
QQS32 IsHaveMidleKey(void);

//是否需要显示wifi这种联网方式的菜单；返回1就是显示菜单，否则就是不显示菜单。
QQS32 IsWIFIModle(void);

//好友上线后是否播放上线声音，加开这个接口的原因是因为有的机型出现播放上线声音死机问题
//返回1   代表好友上线时需要播放声音，返回0就是不播放
QQS32 GetOnlineSoundPlayFlag(void);

//是否有振动的提示开关，返回1表示需要屏蔽振动菜单(当前的平台不支持振动)，
//否则就不需要屏蔽(即支持振动)；这里要反过来定义，是因为之前的版本没有这个开关，返回的默认是0；
QQS32 IsShieldVibrator(void);

//T卡是否存在判断；
QQS8 GetPathFree(void);
//T卡是否存在 的标志位；
QQS8 GetPathFreeFlag(void);

//创建QQ2009D 根目录
void QQ2008CreateRootDir(void);



 /*********************************************************************
函数名:QQ2008MINIShowIdle
功能说明:IDLE界面QQ头像的闪动模式处理，可以是
			  隐藏、闪动、静态显示
**********************************************************************/
void QQ2008MINIShowIdle(QQS8 flag);
 /*********************************************************************
函数名:StopIcon
功能说明:后台运行具体函数，并设置QQ的运行状态
				为后台运行模式
**********************************************************************/
void MINQQ(void);

 /*********************************************************************
函数名:StopIcon
功能说明:停止idle界面QQ头像的闪动，对头像进行隐藏
**********************************************************************/
void StopIcon(void);


 /*********************************************************************
函数名:GetSkyQQRunState
功能说明:获取QQ的当前状态，这里标示的是网络层的
			   状态，可以是
			   	QQ2008_STOP,
				QQ2008_RUN,
				QQ2008_PAUSE,
				QQ2008_BACK_RUN  后台运行
**********************************************************************/
int GetSkyQQRunState(void);
 /*********************************************************************
函数名:SetSkyQQRunState
功能说明:设置当前的QQ运行状态
			   	QQ2008_STOP,
				QQ2008_RUN,
				QQ2008_PAUSE,
				QQ2008_BACK_RUN 后台运行
**********************************************************************/
void SetSkyQQRunState(int state);

 /*********************************************************************
函数名:ActiveQQ2008Screen
功能说明:对底层的模块进行初始化，主要是申请内存
			  和一些数据的初始赋值
**********************************************************************/
void sky_qq_init(void);



 /*********************************************************************
函数名:ActiveQQ2008Screen
功能说明:仅在qq是后台时可以使用它来激活qq界面
**********************************************************************/
extern void ActiveQQ2008Screen(void);

 /*********************************************************************
函数名:QQ2008_StartUpModeSwitchCheck
功能说明:
                当进行双卡切换的时候，这个函数可以判断
                切换后的模式和原来的模式有没有影响，有
                影响的话根据影响层度做不同的处理
                这个函数需在切换成功后再调用 
**********************************************************************/
extern void QQ2008_StartUpModeSwitchCheck(void);

/*********************************************************************
函数名:SKYQQShowIdle
功能说明:在idle界面根据不同的QQ在线状态显示不同的icon
**********************************************************************/
void SKYQQShowIdle(int state);
/*********************************************************************
函数名:QQ2008Mem_malloc
功能说明:以下这个函数实现向多媒体申请内存，申请
 			  的大小是有QQ2008_MEM_LEN这个宏决定的
**********************************************************************/
extern void* QQ2008Mem_malloc(QQS32 size);
/*释放申请到的内存*/
/*********************************************************************
函数名:QQ2008Mem_free
功能说明:释放QQ2008Mem_malloc这个函数申请的内存
**********************************************************************/
extern void  QQ2008Mem_free(void * ptr);
/*********************************************************************
函数名:QQ2008MemoryMalloc
功能说明:以下这个函数供程序调用进行内存的分配
			  可以是QQ2008Mem_malloc申请也可以是静态内存
**********************************************************************/
extern void * QQ2008MemoryMalloc(void);
/*********************************************************************
函数名:GetQQ2008IconState
功能说明:QQ的当前在线状态
	QQ2008_ONLINE_STATUS,
	QQ2008_AWAY_STATUS,
	QQ2008_OFFLINE_STATUS,
	QQ2008_HIDE_STATUS	
			
**********************************************************************/
extern int GetQQ2008IconState(void);

/*********************************************************************
函数名:sky_qq_exit
功能说明:底层的网络层退出并启动新的VM
**********************************************************************/
void sky_qq_exit(void);
/*********************************************************************
函数名:sky_qq_force_exit
功能说明:这个同时会退出dsm
**********************************************************************/
void sky_qq_force_exit(void);

/*********************************************************************
见sky_qq_open.C中同名函数的注释
**********************************************************************/
void SKYQQ_LockLCD_Buffer(void);

void SKYQQ_UNLockLCD_Buffer(void);

/*********************************************************************
见sky_qq_open.C中同名函数的注释
**********************************************************************/
QQS8 IsCanTurnOnTheLCDLight(void);

 /*********************************************************************
函数名:SKYQQMemoryAlloc
功能说明:对SKYQQ需要内存的申请。开放出来的原因是，目前的策略是先申请VM内存再申请QQ的内存
			  如果用户在转后台后(VM释放内存后再进行内存操作，并且内存没有释放干净，这样唤醒的
			  时候会出现内存申请不到的问题，先申请QQ的内存就可以规避这个问题，
注:该接口只用作内存的申请不做其他的任何操作。
       FAE可根据实际需要决定是否要先调用本函数，如果调用了必须在没有启动QQ的情况退出时调用匹配的
       SKYQQMemoryFree函数。如果不调用QQ启动的时候会重新调用。
**********************************************************************/
void SKYQQMemoryAlloc(void);

 /*********************************************************************
函数名:SKYQQMemoryFree
功能说明:用作用户在进入我们的VM后没有进行QQ的相关操作就退出的情况,其他所有的退出情况不允
			  许调用此接口

注:该接口只用作内存的释放不做其他的任何操作。
**********************************************************************/
 void SKYQQMemoryFree(void);
 extern void QQFlicker(int flag);
kal_bool SKY_QQ_IS_IDLE(void);
kal_bool ActiveSkyQQbyIconPos( enum SKY_QQ_TOUCH_STATE state, QQS32 x, QQS32 y);

 
#define SKYQQ_TRACE
#ifdef SKYQQ_TRACE
#define SKY_QQ_TRACE(a)                // kal_prompt_trace a
#else
#define SKY_QQ_TRACE(a)
#endif

#endif 
#endif


